Security Command Center 検出結果のメール通知を Application Integration で構成する
Google Cloudリソースの脆弱性、構成ミス、脅威、コンプライアンス違反を検出するプラットフォームである Security Command Center で検出した結果をリアルタイムでメール通知する方法を検証します。
本検証では、Google Cloud の iPaaS(integration Platform as a Service)ソリューションである「Application Integration」を利用して、簡単にメール通知する設定を構成してみます。
本記事はクラスメソッド DevOps・セキュリティ Advent Calendar 2023 の12/19記事になります!
Security Command Center(SCC) とは
SCC は以下の機能を持つセキュリティ/リスク管理のための統合プラットフォームです。
- 構成ミスと脆弱性を特定
- サイバーリスクの特定と修復の優先順位付け
- Google Cloudリソースを標的とする脅威の検出
- 規制遵守のモニタリングと管理
本検証では、無料のSecurity Command Center Standard を利用し、Security Health Analytics機能を使って 外部IPアドレスが付与されたVMインスタンス を検知(リスクの特定)をしてみます。
Security Command Center の詳細については以下ブログをご参照ください。
Application Integration とは
Application Integration は、サードパーティSaaSアプリケーションやGoogle Cloudリソース、データベースなどをノーコードで容易に接続して自動化するためのiPaaSソリューションです。
本検証では、SCCによるリスク検出結果のメッセージがPub/SubのTopicに公開されたことをトリガーとして、Application Integrationの組み込みアクションである「Send Email」でメール通知する構成を作ります。
Application Integrationの料金は、実行数400/月 または 20GiB/月 まで無料、それ以降は実行数1につき$0.0005、1GiBあたり$10となります。
Application Integration の詳細は以下をご参照ください。
検証
検証構成と参照ドキュメント
本検証の構成は以下のとおりです。
また、本検証は以下ドキュメントを参考にしています。
0.準備
本検証の構成には以下ロールの適用が必要です。
セキュリティ センター管理者:roles/securitycenter.Admin
→ SCCへのアクセスや、Security Command Center API の通知を有効化するために必要
Service Usage 管理者:roles/roles/serviceusage.serviceUsageAdmin
→ 継続的エクスポート(後述します)を作成するために必要
Pub/Sub 管理者:roles/pubsub.admin
→ Pub/Sub トピックやサブスクリプションを作成するために必要
サービスアカウントの作成:roles/iam.serviceAccountCreator
→ サービスアカウントを作成するために必要
Project IAM 管理者:roles/resourcemanager.projectIamAdmin
→ サービスアカウントにロールを付与するために必要
Application Integration 管理者:roles/integrations.integrationAdmin
→ Application Integrationを構成するために必要
また、Security Command Center Standard と Security Health Analytics機能を有効化します。手順については以下ブログをご参照ください。
1.Security Command Center API の有効化
[APIとサービス] → [APIとサービスの有効化]から、検索窓に Security Command Center API と入力して検索します。
Security Command Center API のページに移動し、[有効化する]をクリックします。
2.Cloud Pub/Sub を構成
上記と同様の手順で、Cloud Pub/Sub API を有効化します。
Cloud Shellで以下を実行し、トピック「SCC-Topic」を作成します。
gcloud pubsub topics create SCC-Topic
また、サブスクリプション「SCC-Sub」を作成します。
gcloud pubsub subscriptions create SCC-Sub --topic SCC-Topic
3.SCC の 継続的エクスポート を構成
SCCで検出した結果をCloud Pub/Subのトピックに通知するための設定(=継続的エクスポート)を作成します。
継続的エクスポート名は「SCC-Notifications」としておきます。
[セキュリティ] → [Security Command Center] → [概要] → [設定]をクリックします。
[継続的エクスポート] → [PUB/SUBのエクスポートを作成] をクリックします。
各項目を以下に従って記入します。
継続的なエクスポート名:SCC-Notifications
エクスポート先 プロジェクト名:Pub/Subトピックを作成したプロジェクトを指定
Cloud Pub/Sub トピックを選択してください:前述の手順で作成したPub/Subトピックを選択
[検出クエリ]に以下をコピーして貼り付け、[保存]をクリックします。以下のクエリは、状態がACTIVEかつMUTEされていない検出結果を抽出するという意味です。
state="ACTIVE" AND NOT mute="MUTED"
4.Application Integration Pub/Sub Triggerのためのサービスアカウント作成
Cloud Pub/Subのトピックへの通知をトリガーにApplication Integrationを起動するためのサービスアカウントを事前に作成します。
[IAM] → [サービスアカウント] → [サービスアカウントを作成]をクリックします。
各項目を以下に従って記入し、[作成して続行]をクリックします。
サービスアカウント名:Service Account for Pub/Sub Trigger
サービスアカウントID:pubsubtrigger
[ロールを選択]で Application Integration の起動元 を選択し、[続行]をクリック、最後に[完了]をクリックします。
5.Application Integration を構成
Pub/Subのトピックへの通知をトリガーにメール通知するワークフローを作成します。
まずは検索窓から[Appliaction Integration]を検索します。
[Application Inetgration] → [概要]から、[リージョン]で「asia-northeast1(東京)」を選択し、[QUICK SETUP]をクリックします。
概要の画面から[CREATE INTEGRATION]をクリックします。
各項目を以下に従って記入し、[CREATE]をクリックします。
Integration name:SendEmail
Region:asia-northeast1
Application Integration のフィールド画面が表示されるので、[TRIGGERS] → [Cloud Pub/Sub] を選択します。するとフィールド上に[Cloud Pub/Sub Triger]のオブジェクトが配置できる状態になるので、クリックしてフィールドに配置します。
[Cloud Pub/Sub Trigger]のオブジェクトをクリックすると右側にペインが現れるので、[Trigger Input]に以下を入力します。(以下、PROJECT IDは書き換えてください)
Pub/Sub topic:projects/PROJECT ID/topics/SCC-Topic
サービスアカウント:pubsubtrigger@PROJECTID.iam.gserviceaccount.com
※先ほど作成したサービスアカウントが表示されない場合はブラウザ画面の更新を行ってください。
※[GRANT]が表示された場合はクリックします。
フィールド上部にある[TASKS] → [Data Mapping]を選択すると、フィールド上に[Data Mapping]のオブジェクトの配置ができるのでクリックして以下のイメージで配置します。
[Cloud Pub/Sub Trigger] の点から [Data Mapping] の点までを以下のイメージで線で結びます。
[Data Mapping]のオブジェクトをクリックすると右側にペインが現れるので、[OPEN DATA MAPPING EDDITOR]をクリックします。
[Input]の[Variable or Value]をクリックします。
[Variable] → [Cloud Pub/Sub Message]を選択し、[SAVE]をクリックします。
[Output]の[create a new one]をクリックします。
各項目を以下に従って記入し、[CREATE]をクリックします。
Name:SCC_JSON_Output
Data Type:JSON
Inter from the default value を選択
Use as an input to integration を選択
前のページに戻り、フィールド画面のページを表示します。
フィールド上部にある[TASKS] → [Sned Email]を選択すると、フィールド上に[Sned Email]のオブジェクトの配置ができるのでクリックして以下のイメージで配置します。また、[Data Mapping] の点から [Sned Email] の点までを以下のイメージで線で結びます。
[Send Email]のオブジェクトをクリックすると右側にペインが現れるので、[Task Input]に以下を入力します。
To Recipient(s):宛先メールアドレス
Subject:メールのタイトル
Body Format:Plain Text
Body in Plain Text:VARIABLE をクリックし、CloudPubSubMessage.data を選択。
フィールド右上にある[PUBLISH]をクリックします。
※なお、一度PUBLISHするとバージョン管理され、以後更新する際はUNPUBLISHして編集し、次のバージョンにアップデートするような運用となります。
SCCによるリスク検出 → メール通知 のテスト
外部IPを持つVMインスタンスをCompute Engineで起動してSCCでリスク検出し、検出結果がメールとして通知されているかを確認します。Cloud Shellより以下を実行します。
gcloud compute instances create test-instance \ --zone=asia-northeast1-a \ --machine-type=e2-micro \ --image-project=debian-cloud \ --image-family=debian-11
[セキュリティ] → [Security Command Center] → [検出結果] にて「test-instance」に対する「Public IP address」というリスクが検出されていることを確認します。
指定したメールアドレスに「SCC-ALERT」というタイトルのメールが受信されていることを確認します。
本文を見ると以下のようにSCCからの通知内容がJSON形式で記載されていることがわかります。
おわりに
SCC自体に直接メール通知する機能が無いため、Cloud Pub/Subと組み合わせてメール通知構成を作る必要があります。
Cloud Pub/Subに通知されたことをトリガーとしてCloud Function + メールサービスのAPIを組み合わせてメール送信することも可能ですが、Application Integrationを利用することでGoogle Cloudのサービスのみで且つ比較的容易にメール通知構成を作成できることわかりました。